package com.sikaryofficial.backend.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sikaryofficial.backend.constant.MyStatisticsTypeEnum;
import com.sikaryofficial.backend.domain.dto.req.UserActionReq;
import com.sikaryofficial.backend.domain.dto.resp.UserActionListResp;
import com.sikaryofficial.backend.domain.entity.UserAction;
import com.sikaryofficial.backend.service.statistics.MyStatisticsEvent;

/**
 * @author : qinjinyuan
 * @desc : 用户行为策略接口
 * @date : 2023/10/31 18:53
 */
public interface IUserActionStrategy {

    String SUFFIX = "_user_action_service";

    /**
     *  前置检查
     *  1、检查用户是否存在
     *  2、ActionType对应的范围 与 BusinessType是否支持
     *
     * @param req
     * @return true 成功 false 失败
     */
    void before(UserActionReq req);

    /**
     * 更新用户行为数据
     * @param req
     * @return
     */
    void updateUserAction(UserActionReq req);

    /**
     * 用户行为数据后续处理
     *  1、增加业务ID数据及该数据对应的统计到缓存 （key= 产品ID value = 用户行为数据统计）
     * @param objectId
     * @param options
     * @param userId
     * @return
     */
    void after(MyStatisticsTypeEnum typeEnum,Long objectId,boolean options, Long userId);

    /**
     * 统计数据落地到个人统计数据
     * @param myStatisticsEvent
     * @param options
     */
    void processMyStatisticsEvent(MyStatisticsEvent myStatisticsEvent, boolean options);

    /**
     * 根据ActionType构建用户行为对象数据
     * @param userActionPage
     * @param myStatisticsTypeEnum
     */
    IPage<? extends  UserActionListResp> buildObjByActionType(IPage<UserAction> userActionPage , MyStatisticsTypeEnum myStatisticsTypeEnum);
}
